home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************************
- * *
- * T-BONES *
- * Version 0.7 *
- * January 20, 1991 *
- * *
- * SKELETAL ASM PROGRAMS TO HELP IN PROGRAMMING YOUR OWN TSRs *
- * *
- * Copyright (C) 1990, 1991 by Robert Curtis Davis *
- * *
- * Internet E-mail address: sonny@trantor.harris-atd.com *
- * *
- * US Mail: 430 Bahama Drive *
- * Indialantic, FL 32903 *
- * *
- ***************************************************************************
-
- ONE-LINE DESCRIPTION:
- --------------------
- TBONESxx.ZIP - Skeletal ASM programs for your own TSRs.
-
- ***************************************************************************
-
- DISCLAIMER:
- ----------
- T-BONES is currently under development and this is a preliminary
- version. This software is not warranted to be suitable for any purpose and
- the author will not be held responsible for any damages arising directly or
- indirectly from its use. By the act of using this software, the user agrees
- to these conditions.
-
- ***************************************************************************
-
- DESCRIPTION:
- -----------
- T-BONES is a set of skeletal Assembly Language programs which
- can be used as starting points in developing Terminate-but-Stay-
- Resident (TSR) programs for your DOS computer.
-
-
- BACKGROUND:
- ----------
- In examining some software packages useful in learning about TSRs,
- I couldn't seem to find one that provided skeletal ASM programs into
- which I could easily drop my own Interrupt-triggered or Hot Key-triggered
- routines. It was toward the provision of these bare-bones programs which
- had already taken care of all the various details (initialization, saving
- old interrupt vectors, installing new interrupt vectors, going resident,
- determining if DOS code was interrupted, determining if DOS is at
- "Busy idle", determining if the TSR is already installed, etc.) necessary
- in some TSRs, that I undertook the writing of the programs in T-BONES
- as an aid to my own TSR programming efforts.
- Also, I recognized that not all the features enumerated are
- necessary in every TSR. For example, if you are not going to use
- DOS calls in your routine, checking to be sure DOS is at idle may be
- unnecessary. Therefore, I have included TSRINT and TSRKEY which are
- very simple and leave it up to you to stay out of DOS's way.
- Anyway, it is my hope, based upon feedback from users, to provide
- a set of useful skeletal TSR Assembly Language programs that
- make it relatively easy for programmers to drop their own routines
- into place without having to start all over from scratch on every TSR.
-
- ------------------------------------------
- PERMITTED DISTRIBUTION AND USAGE OF TBONES:
-
- No current restrictions are placed on the distribution either of the
- TBONES package itself (please pass it on to anyone who might use it) or on TSRs
- you might develop using this TBONES software package. But please leave
- somewhere in your program an acknowledgement of TBONES' help in making the
- TSR. Other than that, feel free to modify the ASM file (filename, comments,
- output messages, TSR signature, etc.) to make it "look" and "feel" as you
- wish.
-
- ------------------------------------------
- TBONES' COST:
-
- I presently ask only that you send me (preferably by E-mail) a free
- copy of any generally-useful TSR that you develop using TBONES. That way,
- I am paid in useful software only if TBONES itself proves genuinely useful
- to you.
-
- ------------------------------------------------------------------------------
-
-
- T-BONES currently consists of:
-
- (1) README:
- Quick start information. Read this to find out if TBONES
- might be of use to you.
-
- (2) TBONES07.DOC:
- This complete documentation file.
-
- (3) TSRINT.ASM:
- Assembly Language skeletal program for use in
- developing a TSR program that is triggered into
- action by "Hooking" to a user-specified Interrupt.
- Raw program with NO features to keep you out of
- trouble with DOS nonreentrancy.
-
- (4) TSRINT.COM:
- Executable Hooked Interrupt TSR code obtained by
- assembling TSRINT.ASM (with MASM), linking (with DOS'
- LINK), and conversion from .EXE to .COM form using DOS'
- EXE2BIN. The commands necessary to convert TSRINT.ASM
- to TSRINT.COM are:
-
- MASM TSRINT;
- LINK TSRINT; (Ignore the No Stack warning)
- EXE2BIN TSRINT TSRINT.COM
-
- Or, if working with Borland's TASM package:
- TASM /ml TSRINT
- TLINK /x/t TSRINT
-
- (5) TSRKEY.ASM:
- Assembly Language skeletal program for use in
- developing a TSR program that is triggered into
- action by a user-specified "Hot Key" combination.
- Raw program with NO features to keep you out of
- trouble with DOS nonreentrancy.
-
- (6) TSRKEY.COM:
- Executable HotKey TSR code obtained by assembling
- TSRKEY.ASM (with MASM), linking (with DOS' LINK), and
- conversion from .EXE to .COM form using DOS'
- EXE2BIN. The commands necessary to convert TSRKEY.ASM
- to TSRKEY.COM are:
-
- MASM TSRKEY.ASM;
- LINK TSRKEY.OBJ;
- EXE2BIN TSRKEY.EXE TSRKEY.COM
-
- Or, if working with Borland's TASM package:
- TASM /ml TSRKEY
- TLINK /x/t TSRKEY
-
-
- (7) TSRBONES.ASM:
- TSRBONES is the flagship program in this package.
- It is an Assembly Language skeletal program for use in
- developing a TSR program that is triggered into
- action by a user-specified "Hot Key" combination
- WHEN DOS IS AT "BUSY IDLE" Int 28h. When DOS is
- at "Busy Idle", it is safe to use DOS Function calls
- ABOVE 0Ch without incurring problems with DOS'
- non-reentrancy. The code also prevents multiple
- installations. The TSR also will not trigger if the CPU
- is busy servicing a hardware interrupt (IRQ0 - IRQ7).
-
- (8) TSRBONES.COM:
- Executable HotKey "DOS-OK" TSR code obtained by
- assembling TSRBONES.ASM (with MASM), linking (with
- DOS' LINK), and conversion from .EXE to .COM form
- using DOS' EXE2BIN. The commands necessary to convert
- TSRBONES.ASM to TSRBONES.COM are:
-
- MASM TSRBONES.ASM;
- LINK TSRBONES.OBJ;
- EXE2BIN TSRBONES TSRBONES.COM
-
- Or, if working with Borland's TASM package:
- TASM /ml TSRBONES
- TLINK /x/t TSRBONES
-
- (9) HISTORY:
- The revision history for the TBONES package.
-
- ******************************************************************************
-
- ASSEMBLERS:
-
- The following assemblers are known to successfully assemble the
- ASM files in TBONES:
-
- - ARROWSOFT Public Domain Assembler v1.00d (64K Model)
- - MASM v1.0 and v4.00
- - TASM v1.00
-
- ******************************************************************************
- TSR .COM FILES:
-
- TSRINT:
- ------
- TSRINT, as distributed, hooks to Interrupt 05h, which is
- triggered by the Print Screen Key. The routine included in the distributed
- code for TSRINT simply rings the terminal Bell signal whenever Int 05h is
- executed, i.e, whenever the Print Screen key is pressed. You, of course,
- will replace or expand upon this simple routine so that your TSR performs
- your desired function.
-
- TSRKEY:
- ------
- TSRKEY, as distributed, is set to trigger on CTRL-ALT-K
- as a Hot Key combination. The routine included in the distributed
- code for TSRKEY simply rings the terminal Bell signal whenever the CTRL
- and ALT keys are held down and then the "K" key depressed. You, of course,
- will replace or expand upon this simple routine so that your TSR performs
- your desired function in response to your specified Hot Key combination.
-
- TSRBONES:
- --------
- TSRBONES, as distributed, is set to trigger on CTRL-ALT-B
- as a Hot Key combination. The routine included in the distributed
- code for TSRBONES simply rings the terminal Bell signal whenever the CTRL
- and ALT keys are held down and then the "B" key depressed AND either
- the InDOS Flag is zero OR DOS is at "Busy Idle" (Int28h) AND no hardware
- interrupt (IRQ0 - IRQ7) is being serviced. In addition, the TSR is not
- allowed to trigger if DOS is handling a Critical Error, or if a disk
- access is underway (i.e., if INT 13h is active). Furthermore, the code for
- TSRBONES detects prior installation and does not permit multiple installations
- of the TSR.
- You, of course, will replace or expand upon the simple Bell ringing
- routine so that your TSR performs your desired function in response to your
- specified Hot Key combination.
-
- ****************************************************************************
-
- NOTES ON T-BONES:
- ----------------
-
- - Learning how TSRs work:
-
- In learning to program TSRs, I have written these programs in the
- order: TSRINT, TSRKEY, several programs leading to TSRBONES. This is the order
- of increasing capability and complexity. I believe that a study of the source
- programs in that order might help you in your own quest to learn how TSRs
- work.
-
- TSRBONES is the flagship program of the TBONES package. It incorporates
- all the tricks I CURRENTLY KNOW about in making a TSR coexist safely and robust-
- ly with DOS and with other TSRs. If you detect important oversights on my part
- about these complex matters, I would appreciate your telling me.
-
- If you know that your TSR is simple enough that DOS reentrancy is
- not of concern, you might decide to use the very RAW frameworks of TSRINT
- or TSRKEY, for triggering on an Interrupt or on a Hot Key respectively. You
- might then decide to enhance them by incorporating one or more desired features
- out of the TSRBONES source code.
-
- If you want maximum bells-and-whistles, robustness, and protection
- for your TSR from problems with DOS reentrancy and interference with other
- CPU tasks, use TSRBONES.
-
- TSRBONES requires only about 240 more resident bytes than the simple
- TSRKEY. You may well view that as a small price to pay for the safer, more
- robust, and capable code of TSRBONES.
-
- I might add that I do not pretend that my own knowledge of TSRs
- (or of Assembly Language) is yet complete, and I would appreciate any
- comments you might send to me via E-mail on problems or bugs or bad practice
- that you detect in the included code.
-
-
- - Protecting against problems with DOS non-reentrancy:
-
- Be aware that the simple skeletal programs, TSRINT and TSRKEY, in
- T-BONES do NOTHING to protect you from problems caused by DOS' non-reentrancy.
- Basically, this means that if your TSR interrupts your processor while it is
- executing code that DOS provides to perform some function, then you SHOULD NOT
- PROGRAM YOUR TSR TO RE-ENTER ANY CODE PROVIDED BY DOS. If your processor
- WERE to re-enter DOS code, it might modify memory locations used by DOS
- and therefore when your TSR is exited and the processor attempts to pick
- up where it left off in the DOS code it was executing when your TSR
- interrupted it, unpredictable (and even disastrous) effects can result.
-
- These guidelines can help keep you out of trouble if you use
- TSRINT or TSRKEY:
-
- 1. Don't use DOS functions ( accessed via Int 21h ) unless you
- HAVE to.
-
- 2. If you MUST use DOS functions read a good DOS programming
- reference and study the code in TSRBONES.ASM to learn
- more about the following techniques:
-
- a) Monitoring the InDOS flag to see when it is safe to
- call a DOS function. See the description of
- Function 34h of Int 21h in a DOS programming
- reference to learn how to monitor this flag.
-
- b) Monitoring the Critical Error flag. This flag can
- keep you out of trouble with DOS in some cases
- when InDOS erroneously indicates OK to enter DOS.
-
- c) Monitoring Int 28h to detect DOS' "Busy Wait" for
- console I/O. It is safe to enter DOS for anything
- except console I/O when DOS is in a "Busy Wait".
- Even though the InDOS flag will indicate the
- processor is in DOS code when this "Busy Wait"
- is occurring, Int 28h can be used to give the OK
- to make non-console-I/O DOS calls (Int21h Functions
- above 0Ch).
-
- d) Hooking BIOS Int13h to keep track of when time-critical
- disk access is occurring so your TSR does not
- intrude.
-
-
- - No check for prior installation in TSRINT and TSRKEY:
-
- A shortcoming of the raw programs, TSRINT and TSRKEY, is that those
- TSRs don't check for prior installations of themselves. Thus, they depend
- upon you not to waste memory in installing them multiple times.
-
-
- *****************************************************************************
-
- SOURCES OF FURTHER INFORMATION ON PROGRAMMING TSRs:
-
- BOOKS:
- -----
- One of the best treatments I know of on the complex considerations
- in writing a robust TSR appears in:
-
- _Inside DOS: A Programmer's Guide_
- Author: Michael J. Young
- Publisher: SYBEX, 490 pp., (C)1988, 1990.
- Chapter 11: "Memory Residency" pp. 321-360.
-
- A book which contains a wealth of information useful in designing
- good TSRs is:
- _Undocumented DOS: A Programmer's Guide to Reserved
- MS-DOS Functions and Data Structures_
- by Andrew Schulman, Raymond J. Michels, Jim Kyle,
- Tim Paterson, David Maxey, and Ralf Brown.
- Publisher: Addison-Wesley Publishing Company, Inc., (C)1990.
- Chapter 5: "Memory Resident Software: Pop-ups and
- Multitasking" by Michels, Paterson, and
- Schulman.
-
- I also have learned much from the book:
-
- _DOS Programmer's Reference, 2nd Edition_
- by Terry Dettmann and revised for 2nd Edition by Jim Kyle
- (C)1989 by QUE Corporation, Programming Series
-
- I have found it indispensable as a source for detailed DOS programming
- information.
-
- The Waite Group's _Microsoft Macro Assembler Bible_ by Nabaiyoti
- Barkakati has been most useful on Assembly Language matters.
-
-
- RALF BROWN'S INTERRUPT LIST:
- ---------------------------
- Ralf Brown maintains an astounding file which is chock-full of
- detailed, absolutely-indispensable information for DOS programmers on
- Hardware, BIOS, DOS, and other interrupts. This file is available free for
- the downloading from many BBS's, as well as via anonymous ftp from most major
- archival sites on the Internet. You should not be without this file, which is
- widely-known as "Ralf Brown's Interrupt List". Ask about it. You will find it.
- As of this writing, INTER191.ZIP is the most recent version. In general,
- INTERxyy.ZIP is release x of year yy.
-
-
- TSRDEMO2:
- --------
- TSRDEMO2 by Thomas Brandenborg of Denmark provides valuable data
- to anyone learning to safely program TSRs. His .ASM source program is
- a "sample demonstration of a safe approach for writing TSR programmes."
- This program is available on Compuserve Forums, as well as on many BBSs.
- Mr. Brandenborg might be reached at:
-
- Thomas Brandenborg
- Lundbyesgade 11
- DK-8000 Aarhus C
- DENMARK
-
-
- TesSeRact(TM):
- -------------
- A lot of helpful information in developing TSRs which overcome
- the shortcomings above, and others, can be obtained from the TesSeRact(TM)
- development team. This group provides data on how to produce TSRs compliant
- with the TesSeRact standards. These standards are intended to make TSRs
- peacefully coexist with DOS and with each other in a bullet-proof, safe,
- robust manner. You can learn much from this team that you will need to know in
- programming complex TSRs.
- For information about TesSeRact, contact the TesSeRact Development
- Team at:
-
- TesSeRact Development Team
- c/o Chip Rabinowitz
- 2084 Woodlawn Avenue
- Glenside, PA 19038
- 1-215-884-3373
-
- Compuserve: 70731,20
- MCIMAIL: 315-5415
-
- This MCIMAIL Account has been provided to the TesSeRact Development
- Team by Borland International, Inc. The TesSeRact Development Team is
- in no way associated with Borland International, Inc. TesSeRact is a
- trademark of the TesSeRact Development Team.
-
- *****************************************************************************
-
- KNOWN BUGS:
- ----------
- None. (Now just how long might THAT last? :-)
-
- -END-
-